// utils/format.ts  格式化数据格式
// 数据库中的数据 ['0-0', '0-1-1', '0-2', '0-2-1', '0-3-0']
// 长度为 2 位 是 一级菜单 ['0-0', '0-1','0-2', '0-2', '0-3']  需要从 menus 中进行匹配 数组去重 -- 排序
// 长度是 2 位以上的是二级菜单 ['0-1-1', '0-2-1', '0-3-0']  需要从 menus 中进行匹配  数组去重 -- 排序

import { IMenuProps } from "../router/menu"

// 用来切割用户权限 '0-1-1' 定位具体层级
const sliceStr = (str: string) => {
    if (str.split('-').length > 2) {
        return str.split('-').reduce((_arr, item): any => {
            if (!Array.isArray(_arr)) return [`${_arr}-${item}`]
            return [`${_arr[0]}-${item}`, ..._arr]
        })
    }
    return [str]
}

// 后台返回用户权限数组 checkedKeys ，排序去重得到新的数组，便于从 menu.ts 中提取数据
export const formatArr = (arr: string[]) => {
    const result = arr.reduce((_arr, item) => [..._arr, ...sliceStr(item)], ['0-0'])
    // 数组去重使用 Set 对象，可以快速去重，注意，配置 TS 编译 ES6
    return [...new Set(result)].sort()
}


// 提取合适的menus数据，获取左侧的菜单栏数据
export function getSiderBarMenu(menus: IMenuProps[], checkedKeys: string[]) {// checkedKeys 处理之后的key数组
    let arr: IMenuProps[] = []
    checkedKeys.forEach(item => {
        menus.forEach((value: any) => {
            if (value.keyid === item) {
                // ... 拓展运算符 或者 Object.assign 只能拷贝第一层级的对象的数据
                arr.push({ ...value })
            }
        })
    })
    // 搞定第二层级
    arr.forEach(item => {
        if (item.children) {
            let newArr = getSiderBarMenu(item.children, checkedKeys)
            item.children = newArr
        }
    })
    return arr
}

// 判断 当前请求的地址 是不是在 用户允许权限的 路由系统中 ++++
export function isContainMenus(menus: IMenuProps[], pathname: string) {
    let bool = menus.some(item => {
        if (item.children) {
            if (item.key === pathname) {
                return true
            } else {
                return item.children.some(it => it.key === pathname)
            }
        } else {
            return item.key === pathname
        }
    })
    return bool
}